iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
Mobile Development

Andriod Studio 菜鳥的學習分享系列 第 15

[Android Studio菜鳥的學習分享]內建檔案選擇器-選取檔案並取得檔案路徑

  • 分享至 

  • xImage
  •  

當我們在製作APP時,
很常需要使用者開啟一些檔案讓APP使用,
這時就可以使用Intent開啟內建的檔案選擇器來選擇你要的檔案。
今天要分享如何開啟Android內建的檔案選擇器,
設定想要選取的檔案類型,
方便使用者開啟檔案,
並取得該檔案的路徑。


目標:

按下選取檔案按鈕,
選擇想要的檔案後,
將該檔案的原始路徑顯示在TextView上。

注意事項:

原始路徑會因
Android版本
品牌
選擇軟體
而有所不同,
需要再自行修正成想要的路徑格式。
下面教學有簡單的修改方式!!

結果預覽:

按下選取檔案按鈕
https://ithelp.ithome.com.tw/upload/images/20200909/20129524X941eKKrbu.jpg

選擇想要的檔案
https://ithelp.ithome.com.tw/upload/images/20200909/20129524alKXeV6ksJ.jpg

當沒有選取檔案(直接按下返回鍵)
https://ithelp.ithome.com.tw/upload/images/20200909/20129524I03fwG9t4C.jpg

顯示檔案原始路徑
https://ithelp.ithome.com.tw/upload/images/20200909/20129524qQJ0bGZ1m9.jpg


activity_main.xml

https://ithelp.ithome.com.tw/upload/images/20200910/20129524s4i9YZTqkH.jpg


MainActivity.java

https://ithelp.ithome.com.tw/upload/images/20200910/20129524Zb926Ynbww.jpg

-----onCreate-----

Step01-新增按鈕監聽器:

btnfilechoose = (Button) findViewById(R.id.btnfilechoose);
btnfilechoose.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    }
});

Step02-新增Intent變數:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

Step03-設定檔案類型:

這邊格式為MIME
MIME介紹

intent.setType("*/*");

Step04-開始執行轉跳切換:

這邊使用startActivityForResult
有別於startActivity
它能使用onActivityResult獲得選擇結果。

startActivityForResult(intent,0);

-----onActivityResult-----

Step01-呼叫onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

}

Step02-判斷是否有選擇檔案:

if(resultCode == RESULT_OK){

}
else {
    textoutput.setText("取消選擇檔案!!");
}

Step03-獲得選取檔案的路徑,放入TextView:

Uri uri = data.getData();
textoutput.setText(uri.getPath());

補充-獲得路徑的修改:

一般而言,
Step03即可獲取檔案路徑,
但因為不同原因,
如果獲取檔案的路徑不符合你要的格式,
最簡單的方法就是使用 split() 方法分割字串來修改。

修改前:
https://ithelp.ithome.com.tw/upload/images/20200910/20129524sbsVObLq1v.jpg

修改後:
https://ithelp.ithome.com.tw/upload/images/20200910/20129524b8R7qD6Uim.jpg

Step01-使用原始路徑進行字串分割(以 raw: 為中介):

Uri uri = data.getData();
String[] uripath = uri.getPath().split("raw:");

Step02-判斷使否為空值:

if(uri != null){

}
else{
    textoutput.setText("無效的檔案路徑!!");
}

Step03-查看選取檔案是否需要修改:

try{
    textoutput.setText(uripath[1]);
}
catch (Exception message)
{
    textoutput.setText(uri.getPath());
}

上一篇
[Android Studio菜鳥的學習分享]Activity間傳遞資料-Intent & putExtras & Bundle
下一篇
[Android Studio菜鳥的學習分享]使用他人製作元件模板
系列文
Andriod Studio 菜鳥的學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Jeff_891109
iT邦新手 5 級 ‧ 2021-06-13 15:14:39

你好我想請問一下我用了此方法得到了mp3檔案的路徑後我能用這個路徑實現撥放嗎?
還是有更好的方法實現選擇特定mp3檔後撥放呢?

我要留言

立即登入留言